Amazon IVS Real-Time StreamingにOBSからWHIPでストリーミングしてみた!
はじめに
清水です。先日、Amazon IVS Real-Time StreamingのUser Guideを眺めていたところ、「OBS and WHIP Support」というページが追加されていることを確認しました。(Document Historyによると2024/02/06付で更新されていたようです。)
Document History (Real-Time Streaming) - Amazon IVS
IVSのReal-Time Streaming、基本的にはIVS Broadcast SDKを使ってPublish (ストリーミング)をするものだと思っていたので、User GuideにOBSのサポートが記載されたことに驚きました。
追加された「OBS and WHIP Support (Real-Time Streaming) - Amazon IVS」のページを詳しく確認してみると、 WHIP (WebRTC-HTTP Ingestion Protocol) というプロトコルを使用してOBS経由でPublishingするようです。このWHIPについては、WebRTC取り込みを標準化するために開発されたIETFドラフトとのこと。(WebRTC-HTTP ingestion protocol (WHIP))OBSのような使い慣れたStreaming Software経由でIVS RealTime StreamingへPublishingできるのは嬉しいですよね。Webブラウザからのストリーミング(Publishing)も便利ではあるのですが、きちんと映像制作をしてストリーミングしたい、という場合にはやはりOBSなどの利用に分があるかと思います。
なお、OBS (OBS Studio)としてもWHIPは2023/11/12リリースのバージョン30.0でサポートされたとのことです。
本エントリでは、OBSでWHIPを使ってIVS Real-Time Streamingにストリーミングしてみたのでまとめてみたいと思います。
IVS Real-Time StreamingのStageリソースの準備
まずはIVS Real-Time StreamingのリソースであるStageを作成していきます。Amazon IVSのマネジメントコンソールに進み、Real-time streamingのページから[Create stage]ボタンを押下します。
Stage nameを適切に入力し、[Create stage]します。
Stageが作成できました。
OBS用Participant tokenの作成
続いて、OBSが作成したStageに参加(Publishing)するために必要なParticipant token(参加者トークン)を作成します。WHIP的にはこのParticipant tokenは bearer token と呼ばれるようです。
Stage詳細画面ののParticipant tokensの欄、[Create a participant token]ボタンで進みます。User IDを入力し、CapabilitiesについてはPublish
のみを選択しました。Token durationは60
(60分)としています。このToken durationは使用用途に応じて適宜変更しましょう。
Participant tokenが作成できたら、Tokenの値などをメモしておきましょう。これらの情報はマネジメントコンソールの画面遷移などがあると消えて参照できなくなってしまいます。特にTokenの値はこのあとOBSの配信先設定必要になります。
OBSからWHIPでIVS Real-Time StreamingにPublish
IVS Real-Time StreamingのStageリソースならびにOBS用のParticipant tokenが作成できました。続いて、OBSでWHIPを使ってIVS Stageに配信(Publishing)する設定をしていきます。User Guideの「OBS and WHIP Support」を参照しながら進めます。
OBSの[設定]ボタンから設定画面に進みます。[配信]の項目で、サービスとしてWHIP
を選択します。サーバーはUser Guideを参照してhttps://global.whip.live-video.net
を指定しました。Bearerトークンの欄に、先ほど作成したParticipant tokenのToken値を入力します。
続いて[出力]の項目に進ます。こちらもUser Guide記載の内容を設定していきます。出力モードをデフォルトの「基本」から「詳細」に変更しエンコーダ設定のキーフレーム間隔を1 s
にします。またCPU使用のプリセットをultrafast
、チューンをzerolatency
に設定します。
以上でOBSの準備ができました。映像を準備して配信を開始します。(せっかくのStreaming Software使用のIVS Real-Time Streamingということで、映像キャプチャデバイスのWebカメラだけでなくメディアソースやmacOSスクリーンを並べてみたのですが…… 筆者の映像センスのなさが垣間見えますね。拙い画作りをご容赦ください……) OBSの[配信開始]ボタンを押下するとIVSのStageへPublishが開始されます。
AWSマネジメントコンソールも確認してみましょう。Stage sessionが追加されていること、Stage participantとして先ほど作成したUser ID(OBS-WHIP)が参加していることなどが確認できます。
IVS Real-Time Streamingの映像視聴
OBSからWHIPでIVS Real-Time StreamingのStageにストリーミング(Publish)することができました。続いては視聴者(Subscriber)側からこのStageに参加して、OBSからストリーミングされている映像を視聴してみます。この視聴者側ページについては、User Guideに記載されている以下のSample Codeのページを使用しました。OBSを使用しない、Webブラウザ同士でPublish/Subscribeする場合と同様の手順となります。([NEW] Amazon IVSで遅延300ミリ秒未満で10,000人へのReal-Time Streamingができるようになりました!! | DevelopersIO)
まずは視聴者用のParticipant token(参加者トークン)を作成します。OBS用のParticipant tokenと同様にStage詳細画面の[Create a participant token]ボタンで進みます。User IDを入力し、Capabilitiesについて今度は視聴のみですのでSubscribe
を選択しました。Token durationは60(60分)としています。
視聴者用のParticipant tokenが作成できました。Tokenの値はこのあと視聴ページで入力するのでメモしておきます。
「IVS Real-Time Streaming Web Sample (HTML and JavaScript)」をWebブラウザで開きます。カメラ、マイクの許可については許可を選択しておきました。
index.html
のPREVIEWの部分、Participant Token
の欄に先ほど確認した視聴者用のToken値を入力して[JOIN STAGE]ボタンを押下します。ページ下部に[MUTE MIC]、[MUTE CAMERA]ボタンが現れ、さらにその下にOBSからストリーミングされている映像が表示されました!
もうちょっと映像表示箇所が大きくならないかな、、ということで、映像表示部分を右クリックして[検証]からChromeのデベロッパーツールを表示、該当の<video>タグに適用されているmax-height: 150px
を無効にしてみました。(なお筆者はHTMLやCSSまわりに疎く、見様見真似でやっています。)
映像表示部分が大きくなりました!映像が少し荒いのは、OBSの設定によるもの(CPU使用プリセットのultrafast
など)かと思います。
OBSの画面と視聴ページをならべると以下のようなぐあいです。Real-Time Streamingでは遅延300ミリ秒未満を謳っていることもあり、パッと見ですが大きな遅延は感じられません。
Streaming Software(OBS)からの映像をIVS Real-Time Streamingで視聴できるのが新鮮でなりませんね!
まとめ
OBS StudioからWHIP (WebRTC-HTTP Ingestion Protocol)を使ってAmazon IVSのReal-Time Streamingへストリーミングしてみました。IVS Low-Latency StreamingのほうではOBSをよく利用していましたが、Real-Time StreamingでOBSを利用するのは新鮮ですね!ストリーミングする環境はWebブラウザとOBSなどのStreaming Software、それぞれに長所短所があり、適宜使い分ける必要があるかと思います。これまでWebブラウザなどIVS Broadcast SDKの利用が前提だったIVS Real-Time StreamingでStreaming Softwareをサポートしたことは嬉しいですね!また今回はOBSでの確認でしたが、ほかStreaming SoftwareでのWHIPサポートについても気になるところです。